package com.tanhua.sso.service;

import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.tanhua.common.enums.SexEnum;
import com.tanhua.common.mapper.UserInfoMapper;
import com.tanhua.common.pojo.User;
import com.tanhua.common.pojo.UserInfo;
import com.tanhua.common.service.PicUploadService;
import com.tanhua.common.vo.PicUploadResult;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.Map;

@Slf4j
@Service
public class UserInfoService {
    @Autowired
    private UserService userService;

    @Autowired
    private UserInfoMapper userInfoMapper;

    @Autowired
    private FaceEngineService faceEngineService;

    @Autowired
    private PicUploadService picUploadService;



    /**
     * 校验token 并且将用户基本信息保存到mysql中
     * @param param
     * @param token
     * @return
     */
    public boolean saveUserInfo(Map<String, String> param, String token) {
        // 1. 校验token
        User user = null;
        try {
            user = userService.queryUserByToken(token);
        } catch (Exception e) {
            log.error("校验token失败",e);
            return false;
        }

        // 2. 从请求参数中 拿到需要的数据
        UserInfo userInfo = new UserInfo();

        userInfo.setUserId(user.getId());
        userInfo.setSex(param.get("gender").equals("man ") ? SexEnum.MAN:SexEnum.WOMAN);
        userInfo.setNickName(param.get("nickname"));
        userInfo.setBirthday(param.get("birthday"));
        userInfo.setCity(param.get("city"));
        userInfo.setLogo(param.get("header"));

        // 判断返回的用户是否为空
        if (user != null){
            // 说明校验成功
            // 数据存储到数据库中
            int insert = userInfoMapper.insert(userInfo);
        }

        return true;
    }

    /**
     * 用户信息完善 ———— 人脸识别， 并使用oss对象存储技术，将用户头像图片上传到阿里云
     * @param file
     * @param token
     * @return
     */
    public boolean saveUserLogo(MultipartFile file, String token) {
        // 1. 校验token
        User user = this.userService.queryUserByToken(token);
        if (null == user) {
            return false;
        }

        // 2. 调用虹软人脸识别技术 进行检测
        try {
            boolean b = faceEngineService.checkIsPortrait(file.getBytes());

            if (!b){
                // 人脸识别失败
                return false;
            }
        } catch (IOException e) {
            log.error("人脸识别失败");
            return false;
        }

        // 3. 人脸识别成功之后 将图片上传到阿里云中
        PicUploadResult picUploadResult = picUploadService.upload(file);
        // 3.1 将图片地址保存到 mysql中一份
        if (StringUtils.isEmpty(picUploadResult.getName())){
            // 上传图片失败
            return false;
        }

        UserInfo userInfo = new UserInfo();
        userInfo.setLogo(picUploadResult.getName());
        // 定义修改数据条件
        UpdateWrapper<UserInfo> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("user_id",user.getId());

        int update = userInfoMapper.update(userInfo, updateWrapper);

        // 如果修改成功 就是返回true 失败返回false
        return update == 1;
    }
}
